home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
nt
/
ibmsyn.zip
/
SEMFISTR.H
< prev
next >
Wrap
Text File
|
1992-09-11
|
14KB
|
248 lines
/* NT IBM SDLC Adapter Device Driver: Tracing */
typedef UCHAR TRC_NAME[2];
typedef USHORT TRC_WORD;
typedef ULONG DWORD;
#ifdef XDEBUG /* extra debugging? */
#define XASSERT(c) ASSERT(c)
#else
#define XASSERT(c)
#endif
#define assert ASSERT /* when I say assert, i mean ASSERT! */
/*****************************************************************************/
/* Tracing */
/* */
/* TRACE_OBJECT depends on the objects having a TRC_NAME. */
/* The registered code then is FfOo - 2 chars of function, 2 giving the name */
/* of the object. */
/* */
/* Every trace entry is 4 bytes. Wraparound is only checked when putting in */
/* the start of an entry. If the implementation of TRACE_OBJECT/EVENT as it */
/* stands now is too slow, we can define TRACE_EVENT_WORD(c1,c2,c3,c4) */
/* as (c1<<24)+(c2<<16) etc. and use those values directly */
/*****************************************************************************/
#ifdef IBMSYNC_TRACE
#define TRC_ENTRIES 1024 /* entry count*/
#define TRC_ESIZ 4 /* entry size */
#define TRC_BUFSIZE (TRC_ENTRIES*TRC_ESIZ)
#define TRC_BUFOVERRUN 4 /* see TRC_WRAPCHECK below */
#define TrcPtr2Far (TrcBuffer+sizeof(TrcBuffer) - 16)
/* leave 16 bytes spare @ end to */
/* catch any overflow situations! */
#define DEBUG_PRINT(string) DbgPrint string
#define TRACE_INIT() { TrcPtr = TrcBuffer; \
memset (TrcBuffer, 0, sizeof(TrcBuffer)); \
}
/* WRAPCHECK's ASSERTion: we may have this sequence
- check on non-interrupt side for wrap-check
- get interrupt
- check on interrupt side for wrap-check
- now both sides feel free to increment - so can overrun TrcPtr by 4
- but this should go no further - hence check on BUFOVERRUN=4
*/
#define TRC_WRAPCHECK() if (TrcPtr >= TrcPtr2Far) \
{ \
ASSERT(TrcPtr<=(TrcPtr2Far+TRC_BUFOVERRUN)); \
/* mustn't go past end! */ \
TrcPtr = TrcBuffer; \
}
#define TRC_IN_CHAR(c) *(TrcPtr++) = ((UCHAR) c)
#define TRC_RE_SET(c) *(TrcPtr-1) = ((UCHAR) c)
#define TRC_IN_WORD(wval) *(CAST(TrcPtr,TRC_WORD *)++) = CAST(wval,TRC_WORD)
#define TRC_IN_DW(dval) *(((DWORD *)TrcPtr)++) = ((DWORD ) (dval))
#define TRC_IN_PWORD(wp) TRC_IN_WORD (MAKETYPE(*wp, TRC_WORD))
#define TRC_IN_PDW(dp) TRC_IN_DW (MAKETYPE(*dp, DWORD))
#define TRACE_OBJECT(f,o) { TRC_WRAPCHECK(); \
TRC_IN_PWORD(#f); /* 'f' is 2 literal chars*/\
TRC_IN_PWORD(o.Name);/* 'o' is a .Name'd objct*/\
}
#define TRACE_ACTION(a,p) { TRC_WRAPCHECK(); \
TRC_IN_PWORD(#a); /* 'a' is action name */\
TRACE_WORD(p); /* 'p' is trace param */\
}
#define TRACE_CHAR(c) { TRC_WRAPCHECK(); TRC_IN_CHAR(c); }
#define TRACE_DWORD(d) { \
DWORD dd = CAST (d, DWORD); \
char * pd = CAST(&dd, char *); \
TRC_WRAPCHECK(); \
TRC_IN_CHAR(*(pd+3)); \
TRC_IN_CHAR(*(pd+2)); \
TRC_IN_CHAR(*(pd+1)); \
TRC_IN_CHAR(*(pd )); \
}
#define TRACE_WORD(w) { \
SHORT ww = CAST (w, SHORT); \
char * pw = CAST(&ww, char *); \
TRC_WRAPCHECK(); \
TRC_IN_CHAR(*(pw+1)); \
TRC_IN_CHAR(*(pw )); \
}
//#define TRACE_PDWORD(pd) TRACE_DWORD (CAST ((*pd), DWORD))
#define TRACE_EVENT(d) { TRC_WRAPCHECK(); \
TRC_IN_PDW(#d); \
}
#define TRACE_EVENTNAME(d) { TRC_WRAPCHECK(); \
TRC_IN_PDW(d); \
}
#define TRACE_NEWLINE() { TRACE_CHAR ('&'); \
while ((TrcPtr-TrcBuffer) & 0x0F) \
TRACE_CHAR('&'); \
}
#define TRACE_RCZERO(var) { if (!var) TRACE_ACTION (Rc,0); } /*no trc if !0*/
#define TRACE_RCFALSE(var) TRACE_RCZERO(var)
#define TRACE_RCNONZERO(var) {if (var) TRACE_ACTION (Rc,var); } /*no trc if 0 */
#define TRACE_NTFAILURE(v) { if (!NT_SUCCESS(v)) \
{ \
TRACE_EVENT (NtFl) \
TRC_IN_DW (v); \
} \
}
#define TRACE_DATABYTE(s,v) { TRACE_EVENT(s); TRC_RE_SET(v); }
#define TRACE_RC(var) { TRACE_ACTION(Rc, (TRC_WORD) var); }
/*****************************************************************************/
/* TRACE EVENTS. '_' == { etc. (entry) or } etc. (exit) */
/* TRACE DATABYES. '.' == databyte value */
/* */
/* Type Cmd_ Adapter command sequence */
/* ---- --------------------------------------------- */
/* Objct Ad Adapter (device extension) */
/* Call ARs_ Adapter reset (low level) */
/* Call C73_ Close8273Sequence */
/* Call DevI Device Successfully initialised */
/* Call DiNa DeviceInit: No adapter */
/* Call DiNd DeviceInit: No device allocated by create device */
/* Call DmaX Dma buffer crosses 64k */
/* Call DPC_ Routine: DPC. */
/* Call DrvF Driver Load Failure */
/* Call Entr DriverEntry called from NT */
/* Call EPC_ Routine: EntryPointClose */
/* Call EPD_ Routine: EntryPointDevIoctl */
/* Call EPO_ Routine: EntryPointOpen */
/* Call EP?_ Routine: EntryPointRogueInterrupt (Int 4 from PCA adapter) */
/* Call GV2_ Routine: Get V24 */
/* Call HwIF Hardware init failure */
/* Call IAR_ Routine: IoctlAbortRx */
/* Call IAT_ Routine: IoctlAbortTx */
/* Objct Ii Iostatus Information field set */
/* Objct In Initialise: (Buffer) */
/* Call InA_ Routine: Initialise adapter */
/* Call InRF Init RFDs */
/* Call IoC_ Routine: IoctlSetLinkCharacteristics */
/* Call IoI_ Routine: IoctlSetInterfaceRecord */
/* Call IoR_ Routine: IoctlRxFrame */
/* Call IoRN Ioctl RxFrame: nothing received (unsatisfied poll) */
/* Call IoS_ Routine: IoctlSetInterface Record */
/* Call IoT_ Routine: IoctlTxFrame */
/* Call IVI_ Routine: IoctlGetV24Input */
/* Call IVO_ Routine: IoctlSetV24Output */
/* Byte Mpc Config byte going to MPCA */
/* Call OcAs OpenCreate: Allocate of SpinLock failed */
/* Call OcCi OpenCreate: Connect to interrupt failed */
/* Call OcWb OpenCreate: Wrong bus */
/* Word Op Open adapter with base address bbbb */
/* Word Ra Rx AvailableByteCount (RxFSMActionStart) */
/* Call RAI_ Routine: RxFSMActionInvalid */
/* Objct Rb Rx Buffer number */
/* Word Rc Return code Word */
/* Rg RFDNextToGet - RFD_GOT (RFD) */
/* Word Rl Received fram length llll */
/* Call RFE_ Routine: RxFSMEvent */
/* Word Rm RxFSMActionRcvError - ErrorMapArray entry value */
/* Call ROk_ Routine: RxFSMActionRcvOK */
/* Objct Rp RFDNowBeingPut - RFD_PUT_COMPLETE (RFD) */
/* Word Rs Rx StartIndex */
/* Call RSt_ Routine: RxFSMActionStart */
/* Call RSo_ Routine: RxFSMActionStop */
/* Byte RxD Received data byte */
/* Byte RxR Receiver result byte */
/* Call SDM_ Routine: StartDMA */
/* Call SLC_ Routine: SetLinkConfig */
/* Word St Non-success NT status */
/* Call T!!! Routine: TxFSMAction Invalid! */
/* Word Ta Ta Tx BuffserSpaceAvailable */
/* Call TAb Routine: TxFSMActionAbort */
/* Word Tb Tb TxNextToBuffer */
/* Byte TEb Transmit result error byte */
/* Call TEr Routine: TxFSMActionEndError */
/* Word Tn Tn BufferSpaceNeeded */
/* Call TPIO TxPIOData pointer follows */
/* Word Tt Tt TxNextToTransmit */
/* Word Tu Tu TxStartUnusedArea */
/* Word Tx Tx LinkMaxFrameSize */
/* Byte TxD Transmit data byte */
/* Byte TxR Transmit result byte */
/* Call WaTo WAITUNTIL Timeout (leading to hardware error incremented) */
/* Call XEO_ Routine: SynchEntryPointOpen */
/* Call XR8_ Routine: SynchReset8273 */
/* Call XTA_ Routine: SynchTerminateAdapter */
/* Call ZDM_ Zap (= Mask) DMA */
/* */
/* */
/*****************************************************************************/
#else
#define DEBUG_PRINT(string)
#define TRACE_OBJECT(f,o)
#define TRACE_ACTION(a,p)
#define TRACE_CHAR(c)
#define TRACE_DWORD(d)
#define TRACE_PDWORD(pd)
#define TRACE_EVENT(d)
#define TRACE_NEWLINE()
#define TRACE_RCZERO(var)
#define TRACE_RCFALSE(var)
#define TRACE_RCNONZERO(var)
#define TRACE_NTFAILURE(v)
#define TRACE_DATABYTE(s,v)
#define TRACE_RC(var)
#endif
#ifdef XDEBUG
#define XTRACE_OBJECT TRACE_OBJECT
#define XTRACE_ACTION TRACE_ACTION
#define XTRACE_CHAR TRACE_CHAR
#define XTRACE_DWORD TRACE_DWORD
#define XTRACE_PDWORD TRACE_PDWORD
#define XTRACE_EVENT TRACE_EVENT
#define XTRACE_NEWLINE TRACE_NEWLINE
#define XTRACE_RCZERO TRACE_RCZERO
#define XTRACE_RCFALSE TRACE_RCFALSE
#define XTRACE_RCNONZERO TRACE_RCNONZERO
#define XTRACE_NTFAILURE TRACE_NTFAILURE
#define XTRACE_DATABYTE TRACE_DATABYTE
#define XTRACE_RC TRACE_RC
#else
#define XTRACE_OBJECT(f,o)
#define XTRACE_ACTION(a,p)
#define XTRACE_CHAR(c)
#define XTRACE_DWORD(d)
#define XTRACE_PDWORD(pd)
#define XTRACE_EVENT(d)
#define XTRACE_NEWLINE()
#define XTRACE_RCZERO(var)
#define XTRACE_RCFALSE(var)
#define XTRACE_RCNONZERO(var)
#define XTRACE_NTFAILURE(v)
#define XTRACE_DATABYTE(s,v)
#define XTRACE_RC(var)
#endif